草庐IT

带指针的 C++ vector

全部标签

c++ - std::atomic_compare_exchange_* 等如何与任意指针一起使用?

InterlockedCompareExchange在Windows中,以及__sync_val_compare_and_swap在gcc中采用指针,因此我可以传入任何地址,例如指向这些函数的共享内存块。对于非x86架构,我可能必须确保内存对齐以确保正确性,对于x86(可能还有其他),我可能希望确保缓存行对齐以提高性能,尽管正确性应该不是问题(->x86LOCK前缀)。为了摆脱我的代码中一些平台相关的东西(WindowsVC++与GCC),我查看了C++11的atomic_compare_exchange_weak。和friend。但它们都对std::atomic*类型的变量起作用.有

c++ - GDB 观察实例 vector 中的类成员

这是我的类(class)的一个极其简化的版本:ClassMyClass{public:intsizeDesired;};我正在创建MyClass的vector主要实例:intmain(intargc,char**argv){std::vectormyvec;for(inti=0;i有一些内存损坏(我认为)错误导致我的程序崩溃。我观察到MyClass::sizeDesired的值程序崩溃时是垃圾。所以,我想在每个MyClass:sizeDesired上设置一个观察点成员,这样我就可以准确地看到这些成员的值何时发生变化。使用GDB,我该怎么做?当我在推送MyClass的所有实例后中断时在s

c++ - 如何编写接受 std::vector 或 std::list 的函数?

我想这个问题有点简单。vector和列表都有push和pop函数,而且-更重要的是-可以迭代:for(autovalue:items)...然而,std::vector和std::list似乎并不共享一个基类。因此,问题是:我如何编写一个函数来接受其中一个(或者,实际上,任何其他适合实现的东西)?std::lista;std::vectorb;DoSomething(a);DoSomething(b);我想在不重载的情况下进行。如果使用模板,它们不应该导致疯狂的错误消息。比如下面的代码——inta;DoSomething(a);--应该会导致调用站点出现编译错误,不在模板内的某处!有人

c++ - 最令人烦恼的解析和指针间接/解引用

最少的代码:structA{A(int=0){}};inti=0,*p=&i;int*foo(){returnp;}intmain(){A();//calls`A::A(int=0)`A(i);//calls`A::A(int=0)`A(*p);//预计至少A((*p))会调用A::A(int=0)。即使在*p周围放置多个大括号,也会将语句视为A*p;。foo相关语句也是如此,其中构造函数A::A(int=0)没有被调用。这是一个demo.问题:为什么连(2)和(4)都被视为声明?语句(3)和(4)中foo的描述是什么? 最佳答案

c++ - 将一维, "flattened"索引转换为N维数组的N维 vector 索引

我有一个N维数组,每个维度都有相同数量的项目(即相同的“长度”)。给定一个数组中的一维索引,我想要一个返回与该索引关联的坐标的函数。数组的索引方式实际上无关紧要(从某种意义上说,数组的所有维度都相等,就将在数组上运行的算法而言,没有一个具有优先级)。因此,例如,如果我有一个4x4x4数组,索引63应返回[3,3,3],索引0应返回[0,0,0],索引5应返回[1,1,0].我写了下面的函数,其中nDim是维数,nBin是每个维的长度:defindicesOf(x,nDim,nBin):indices=[]foriinarange(0,nDim):index=(x/nBin**(i))%

c++ - 编译时基类指针偏移到派生类

classBase1{intx;};classBase2{inty;};classDerive:publicBase1,publicBase2{public:enum{PTR_OFFSET=((int)(Base2*)(Derive*)1)-1,};};但是编译器报错expectedconstantexpression除了编译器,大家都知道表达式值为4,哪里出了问题?那么如何在编译时获取偏移量呢? 最佳答案 解决您在提供的代码中看到的直接编译器错误,(Base2*)(Derive*)1在编译时很可能会变成reinterpret_ca

c++ - 通过 && 在 std::vector push_back() 和 std::map operator[] 中获取参数

这个问题在这里已经有了答案:Whatismovesemantics?(11个答案)关闭9年前。我在std::vector::push_back()实现中发现了这个:voidpush_back(_Ty&&_Val){//somecodehere}这在std::mapoperator[]实现中:mapped_type&operator[](key_type&&_Keyval){//somecodehere}为什么_Val和_Keyval是按引用方式取的?通过引用引用的方式进行论证是如何工作的?与引用引用相比,这种方法有什么好处?附言这不是逻辑上的“与”,我明白这一点。

C++:从基类型指针确定派生类型

背景:参见thisquestionintheC++FAQ对于我需要解决的类似情况,但使用命名构造函数。我有一个基类,B类。我有一个来自B的派生类,D类,它通过函数、成员和额外的内存分配添加了额外的功能。classB通过不执行任何操作或从特定于classDnullptrs以多态方式支持附加功能.B类使用publicstaticFactoryMethods来构造所有protected构造函数。(参见:NamedConstructorIdiom)D类使用publicstaticFactoryMethods构造所有protectedconstructors,这些构造函数的名称与B类不同,并且在

c++ - Boost.Python - vector 到 Numpy 数组

我有以下类(class):classPyWav{public:staticinlineboost::python::objectsdVecToNumpyArray(std::vectorconst&vec){npy_intpsize=vec.size();double*data=size?const_cast(&vec[0]):static_cast(NULL);PyObject*pyObj=PyArray_SimpleNewFromData(1,&size,NPY_DOUBLE,data);boost::python::handlehandle(pyObj);boost::pytho

c++ - 如何将这种重用存储撤消堆栈模式从通用 vector 调整为类型化模型?

我一直在尝试完全理解SeanParent'stalk"InheritanceIsTheBaseClassofEvil"中演示的撤消模式.演讲涵盖了很多基础知识,包括C++移动语义,以及使用概念来实现多态性而不是继承,但增量撤消存储模式是我一直试图了解的模式。这是Parent在他的演讲中给出的示例的工作改编:#include#include#include#includeusingnamespacestd;templatevoiddraw(constT&x,ostream&out,size_tposition){outobject_t(Tx):self_(make_shared>(mov